// 导入axios
import axios from "axios";
// 导入store获取store对象
import store from "@/store/index";
// 对axios进行封装
// 目标：让ret替代ret.data，使得以后再去获取返回结果直接使用ret即可
// 知识点：拦截器，作用是拦截请求和响应的，分为：
// 请求拦截器、响应拦截器

// 请求拦截器：
// 使用场景：需要在请求的时候设置全局的超时时间、设置比较统一的请求头等
axios.interceptors.request.use((config) => {
    // 拦截下来
    // 在这里增加上额外需要的处理，比如加头信息、加全局配置。。。
    // 追加头信息
    let _token = store.state.common._token;
    if (_token) {
        config.headers["Authorization"] = _token;
    }
    // 放行
    return config;
});

// 响应拦截器
// 使用场景：用于对响应结果进行加工处理再返回
axios.interceptors.response.use((ret) => {
    // 为了方便，在拦截器中判断是否有token，如果有则直接存储（复用）
    if (ret.data._token) {
        // 存储到vuex中
        store.commit("common/setToken", ret.data._token);
    }

    // 拦截下来
    // 对数据进行再加工
    // if(ret.data){
    //     return ret.data
    // }else{
    //     return ret;
    // }

    // 简写
    // return ret.data ? ret.data : ret;
    // 再简写（短路运算）
    return ret.data || ret;
});

// 导出axios
export default axios;